﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using GRUPO_4.Dominio;
using System.Configuration;

namespace GRUPO_4.Persistencia
{

    
    public class InscripcionesPostulanteDao : IinscripcionPostulanteDAO
    {
        public SqlConnection conexion;

        public InscripcionesPostulanteDao()
        {
            conexion = new SqlConnection();
            conexion.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        }

        public InscripcionesPostulante CrearInscripcionesPostulante(InscripcionesPostulante inscripcionesPostulante)
        {
            String sentencia = "INSERT INTO InscripcionesPostulante VALUES (@idInscripciones,@fecInscripcion,@ganador,@presentacionPostulante,@codPostulante,@codEmpresa,@idofertalaboral)";
            conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, conexion))
            {
                SqlParameter idInscripciones = new SqlParameter("@idInscripciones", System.Data.SqlDbType.Int);
                idInscripciones.Value = inscripcionesPostulante.idInscripciones;
                comando.Parameters.Add(idInscripciones);

                SqlParameter fecInscripcion = new SqlParameter("@fecInscripcion", System.Data.SqlDbType.DateTime);
                fecInscripcion.Value = DateTime.Now;
                comando.Parameters.Add(fecInscripcion);

                SqlParameter ganador = new SqlParameter("@ganador", System.Data.SqlDbType.Int);
                ganador.Value = inscripcionesPostulante.ganador;
                comando.Parameters.Add(ganador);

                SqlParameter presentacionPostulante = new SqlParameter("@presentacionPostulante", System.Data.SqlDbType.NVarChar);
                presentacionPostulante.Value = inscripcionesPostulante.presentacionPostulante;
                comando.Parameters.Add(presentacionPostulante);

                SqlParameter codPostulante = new SqlParameter("@codPostulante", System.Data.SqlDbType.Int);
                codPostulante.Value = inscripcionesPostulante.codPostulante;
                comando.Parameters.Add(codPostulante);

                SqlParameter codEmpresa = new SqlParameter("@codEmpresa", System.Data.SqlDbType.Int);
                codEmpresa.Value = inscripcionesPostulante.codEmpresa;
                comando.Parameters.Add(codEmpresa);

                SqlParameter idofertalaboral = new SqlParameter("@idofertalaboral", System.Data.SqlDbType.Int);
                idofertalaboral.Value = inscripcionesPostulante.idOfertaLaboral;
                comando.Parameters.Add(idofertalaboral);
                comando.ExecuteNonQuery();
            }

            conexion.Close();
            return this.ObtenerInscripcionPostulante(inscripcionesPostulante.idInscripciones);
        }

        public InscripcionesPostulante ObtenerInscripcionPostulante(int codigo)
        {

            String sentencia = "SELECT * FROM InscripcionesPostulante WHERE idInscripciones=@idInscripciones";
            conexion.Open();
            InscripcionesPostulante inscripcionesPostulante = null;

            using (SqlCommand comando = new SqlCommand(sentencia, conexion))
            {
                SqlParameter buscador = new SqlParameter("@idInscripciones", System.Data.SqlDbType.Int);
                buscador.Value = codigo;
                comando.Parameters.Add(buscador);
                SqlDataReader resultado = comando.ExecuteReader();

                if (resultado.HasRows)
                {
                    resultado.Read();
                    inscripcionesPostulante = new InscripcionesPostulante();
                    inscripcionesPostulante.idInscripciones = (int)resultado["idInscripciones"];
                    inscripcionesPostulante.fecInscripcion = (DateTime)resultado["fecInscripcion"];
                    inscripcionesPostulante.ganador = (int)resultado["ganador"];
                    inscripcionesPostulante.presentacionPostulante = (String)resultado["presentacionPostulante"];
                    inscripcionesPostulante.codPostulante = (int)resultado["codPostulante"];
                    inscripcionesPostulante.codEmpresa = (int)resultado["codEmpresa"];
                    inscripcionesPostulante.idOfertaLaboral = (int)resultado["idofertalaboral"];
                }
            }


            conexion.Close();
            return inscripcionesPostulante;
        }


        public InscripcionesPostulante ModificarInscripcionesPostulante(InscripcionesPostulante inscripcionesPostulante)
        {
            String sentencia = "UPDATE InscripcionesPostulante SET ganador=@ganador,presentacionPostulante=@presentacionPostulante,codPostulante=@codPostulante,codEmpresa=@codEmpresa,idofertalaboral=@idofertalaboral WHERE idInscripciones=@idInscripciones";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, conexion))
            {
                SqlParameter idInscripciones = new SqlParameter("@idInscripciones", System.Data.SqlDbType.Int);
                idInscripciones.Value = inscripcionesPostulante.idInscripciones;
                comando.Parameters.Add(idInscripciones);

                SqlParameter ganador = new SqlParameter("@ganador", System.Data.SqlDbType.Int);
                ganador.Value = inscripcionesPostulante.ganador;
                comando.Parameters.Add(ganador);

                SqlParameter presentacionPostulante = new SqlParameter("@presentacionPostulante", System.Data.SqlDbType.NVarChar);
                presentacionPostulante.Value = inscripcionesPostulante.presentacionPostulante;
                comando.Parameters.Add(presentacionPostulante);

                SqlParameter codPostulante = new SqlParameter("@codPostulante", System.Data.SqlDbType.Int);
                codPostulante.Value = inscripcionesPostulante.codPostulante;
                comando.Parameters.Add(codPostulante);

                SqlParameter codEmpresa = new SqlParameter("@codEmpresa", System.Data.SqlDbType.Int);
                codEmpresa.Value = inscripcionesPostulante.codEmpresa;
                comando.Parameters.Add(codEmpresa);

                SqlParameter idofertalaboral = new SqlParameter("@idofertalaboral", System.Data.SqlDbType.Int);
                idofertalaboral.Value = inscripcionesPostulante.idOfertaLaboral;
                comando.Parameters.Add(idofertalaboral);

                comando.ExecuteNonQuery();

            }

            conexion.Close();
            return this.ObtenerInscripcionPostulante(inscripcionesPostulante.idInscripciones);
        }

        public void EliminarInscripcionPostulante(int codigo)
        {
            String sentencia = "DELETE FROM InscripcionesPostulante where idInscripciones=@idInscripciones";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter borrador = new SqlParameter("@idInscripciones", System.Data.SqlDbType.Int);
                borrador.Value = codigo;
                comando.Parameters.Add(borrador);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();

        }

        public ICollection<InscripcionesPostulante> ListarTodos()
        {
            conexion.Close();
            conexion.Open();

            String sentencia = "SELECT * FROM InscripcionesPostulante";

            SqlCommand comando = new SqlCommand(sentencia, conexion);

            SqlDataReader resultado = comando.ExecuteReader();

            //Se declara la coleccion de InscripcionPostulante --- Coleccion es un contenedor de objetos de tipo InscripcionesPostulante

            ICollection<InscripcionesPostulante> objColeccionInscripcionesPostulante = new List<InscripcionesPostulante>();

            while (resultado.Read())
            {

                InscripcionesPostulante unaInscripcionPostulante = new InscripcionesPostulante();

                unaInscripcionPostulante.idInscripciones = (Int32)resultado["idInscripciones"];
                unaInscripcionPostulante.fecInscripcion = (DateTime)resultado["fecInscripcion"];
                unaInscripcionPostulante.ganador = (Int32)resultado["ganador"];
                unaInscripcionPostulante.presentacionPostulante = (String)resultado["presentacionPostulante"];
                unaInscripcionPostulante.codPostulante = (int)resultado["codPostulante"];
                unaInscripcionPostulante.codEmpresa = (int)resultado["codEmpresa"];
                unaInscripcionPostulante.idOfertaLaboral = (int)resultado["idOfertaLaboral"];

                objColeccionInscripcionesPostulante.Add(unaInscripcionPostulante);
            }
            conexion.Close();
            return objColeccionInscripcionesPostulante;
        }

        public ICollection<InscripcionesPostulante> ListarPorNombreSimilar(string descripcion)
        {
            throw new NotImplementedException();
        }

        public InscripcionesPostulante Crear(InscripcionesPostulante inscripcionesPostulante)
        {
            return this.CrearInscripcionesPostulante(inscripcionesPostulante);
        }

        public InscripcionesPostulante Obtener(int id)
        {
            return this.ObtenerInscripcionPostulante(id);
        }

        public InscripcionesPostulante Modificar(InscripcionesPostulante inscripcionesPostulante)
        {
            return this.ModificarInscripcionesPostulante(inscripcionesPostulante);
        }

        public void Eliminar(InscripcionesPostulante inscripcionesPostulante)
        {
            this.EliminarInscripcionPostulante(inscripcionesPostulante.idInscripciones);
        }

    }
}